#ifndef EXCHANGE_DOCUMENT_INSTANCE_H
#define EXCHANGE_DOCUMENT_INSTANCE_H

#include <string>
#include "ExchangeMatrix.h"
#include "memory"

namespace AMCAX::Exchange
{
        class ExchangeDocumentReference;

        /// @brief
        class ExchangeDocumentInstance
        {
        public:
            ExchangeDocumentInstance() = default;

            std::shared_ptr<ExchangeDocumentReference> GetDocumentReference() const;
            void SetDocumentReference(std::shared_ptr<ExchangeDocumentReference> documentReference);

            std::string GetPersistName() const;
            void SetPersistName(const std::string &pname);

            ExchangeMatrix GetTransform() const;
            void SetTransform(const ExchangeMatrix &matrix);

            std::string GetName() const;
            void SetName(const std::string &name);

        private:
            /// The name of the document instance
            std::string name_;
            /// The persist name of the document instance
            std::string pname_;
            /// The document reference of the instance
            std::shared_ptr<ExchangeDocumentReference> documentReference_ = nullptr;
            /// The transformation matrix of the instance
            ExchangeMatrix transform_;
        };
}

#endif // EXCHANGE_DOCUMENT_INSTANCE_H